from strategy.StrategyTemplate import StrategyTemplate
from resource.jsl_data_map import default_columns
from strategy import strategy_filter


class ThreeLowRoll(StrategyTemplate):
    """
    三低轮动策略
        三低评分 = 可转债当前价格 × (1+溢价率) × 剩余规模，越低越好
        150 无阈值 170 160 140 130
    买入方法:

        等权重买入排名前5或前10的转债
        等权重的意思就是，买入相同或相近金额。
    卖出方法:

        每周固定时间轮动
        比如本周一14:00买了前5只，下周一14:00看名单，还在前5的留下，不在的剔除，纳入新进入的
        中间无论亏损或者盈利都不管，放着不动，到计划的时间再进行操作
    详细介绍: 三低轮动策略

    展示总数: 20

    """
    def __init__(self):
        super(self.__class__, self).__init__()
        self.strategy_name = "大白话强化三低轮动策略"
        self.strategy_descrption = "按涨幅排序"

    def run(self):
        # 基础过滤，过滤掉新债、强赎、EB
        self.data = strategy_filter.filter_base(self.data)
        self.data = self.data.loc[self.data['剩余规模'] < 3.0]
        self.data = self.data.loc[self.data['溢价率'] < 50]
        self.data = self.data.loc[((self.data['现价'] < 150) & (self.data['现价'] > 130))]
        self.data = self.data.loc[self.data['剩余年限'] >= 0.6]
        self.data['评分'] = self.data['现价'] * (1 + self.data['溢价率'] / 100) * self.data['剩余规模']
        self.data = self.data.sort_values(by='评分', ascending=True)
        self.data = self.data[['转债名称', '转债代码', '现价', '涨跌幅', '溢价率', '剩余年限', '转股价值',
                               '剩余规模', '评分', '强赎状态', '行业', '正股波动率', '基金持仓','成交额']]
        # 清掉原来的索引
        self.data.reset_index(inplace=True, drop=True)
        self.data.to_excel('20230607三低轮动强化.xlsx')


if __name__ == '__main__':
    ins = ThreeLowRoll()
    ins.topN = 10
    ins.test()

